package com.ztr.test;

import java.util.HashMap;
import java.util.Map;  
import java.util.UUID;  
  
public class DeviceAlertCache {  
    // 假设设备的唯一标识是String类型的设备ID  
    private Map<String, UUID> alertCache = new HashMap<>();  
  
    // 检查设备是否在线的函数，这里仅作为示例，实际情况中您需要根据您的应用逻辑来实现  
    public boolean isDeviceOnline(String deviceId) {  
        // 这里应该实现检查设备是否在线的逻辑  
        // 示例中我们假设设备始终在线，以便演示告警标识的生成和更新  
        return true; // 假设返回值，实际使用时替换为真实逻辑  
    }  
  
    // 当检测到设备不在线时，缓存告警标识  
    public void cacheOfflineAlert(String deviceId) {  
        if (!isDeviceOnline(deviceId)) {  
            // 如果设备不在线，生成新的告警标识并缓存  
            UUID alertId = UUID.randomUUID();  
            alertCache.put(deviceId, alertId);  
            // 这里可以添加逻辑来记录或通知告警  
        }  
    }  
  
    // 当设备状态改变时（从在线变为不在线，或者从不在线变为在线），更新告警标识  
    public void updateAlertForDeviceStatusChange(String deviceId) {  
        if (!alertCache.containsKey(deviceId)) {  
            // 如果缓存中还没有这个设备的告警标识，先缓存一个  
            cacheOfflineAlert(deviceId);  
        } else {  
            // 设备状态改变，生成新的告警标识  
            UUID newAlertId = UUID.randomUUID();  
            alertCache.put(deviceId, newAlertId);  
            // 这里可以添加逻辑来记录或通知新的告警  
        }  
    }  
  
    // 获取设备的告警标识  
    public UUID getAlertIdForDevice(String deviceId) {  
        return alertCache.get(deviceId);  
    }  
  
    // 清空缓存  
    public void clearCache() {  
        alertCache.clear();  
    }  
  
    // 示例方法，用于模拟检查设备状态和更新告警标识的过程  
    public static void main(String[] args) {  
        DeviceAlertCache cache = new DeviceAlertCache();  
        String deviceId = "device123";  
  
        // 假设第一次检测到设备不在线  
        cache.cacheOfflineAlert(deviceId);  
        System.out.println("Initial alert ID for device " + deviceId + ": " + cache.getAlertIdForDevice(deviceId));  
  
        // 假设之后设备状态没有变化，告警标识保持不变  
        // ...  
  
        // 假设之后设备状态改变（例如从在线变为不在线）  
        cache.updateAlertForDeviceStatusChange(deviceId);  
        System.out.println("Updated alert ID for device " + deviceId + ": " + cache.getAlertIdForDevice(deviceId));  
    }  
}